package com.ruoyi.warn.controller;

import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.msg.domain.bo.MsgPushBo;
import com.ruoyi.msg.domain.vo.MsgPushVo;
import com.ruoyi.msg.service.IMsgPushService;
import com.ruoyi.warn.domain.vo.*;
import com.ruoyi.warn.service.IWarnService;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * @author zhangxiaohao
 * @comment
 * @date 2023/2/13
 */
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/warn")
public class WarnController {

    private final IWarnService warnService;
    private final IMsgPushService iMsgPushService;

    /**
     * 消息推送列表
     */
    @GetMapping("/msgPush/list")
    public R<List<MsgPushVo>> msgPushList(MsgPushBo bo) {
//        bo.setAppointorId(LoginHelper.getLoginUser().getUserId());
        return R.ok(iMsgPushService.queryList(bo));
    }

    /*
     * 风险人员统计
     */
    @GetMapping("/fxry/nums")
    public R<FxryNumsVo> fxryNums() {
        return R.ok(warnService.fxryNums());
    }

    /*
     * 风险人员详情
     */
    @GetMapping("/fxry/details")
    public R<List<FxryDetailVo>> fxryDetails() {
        return R.ok(warnService.fxryDetails());
    }

    /*
     *  ------------------------------------ 社戒社康 ------------------------------------
     */

    /**
     * 社戒社康 - 总人数
     */
    @GetMapping("/sjsk/zrs")
    public R<Integer> sjskzrs() {
        return R.ok(warnService.sjskzrs());
    }

    /**
     * 社戒社康 - 本月新增人数
     */
    @GetMapping("/sjsk/byxzrs")
    public R<Integer> sjskbyxzrs() {
        return R.ok(warnService.sjskXzrsByMonth(DateUtils.getDate()));
    }

    /**
     * 社戒社康 - 统计 - 本月新增人数
     */
    @GetMapping("/sjsk/byxzrs/statistics")
    public R<List<DayStatisticsVo>> sjskbyxzrsStatistics() {
        return R.ok(warnService.sjskbyxzrsStatisticsByMonth(DateUtils.getDate()));
    }

    /**
     * 社戒社康 - 本月新增人员详情列表
     */
    @GetMapping("/sjsk/byxzrs/detail")
    public R<List<RyDetailVo>> sjskbyxzrsDetail() {
        return R.ok(warnService.sjskXzrsDetailByMonth(DateUtils.getDate()));
    }

    /**
     * 社戒社康 - 导出 - 本月新增人员详情列表
     */
    @PostMapping("/sjsk/byxzrs/export")
    public void sjskbyxzrsExport(HttpServletResponse response) {
        List<RyDetailVo> list = warnService.sjskXzrsDetailByMonth(DateUtils.getDate());
        ExcelUtil.exportExcel(list, "社戒社康总人数", RyDetailVo.class, response);
    }

    /*
     *  ------------------------------------ 严重违反协议 ------------------------------------
     */

    /**
     * 严重违反协议 - 总人数
     */
    @GetMapping("/yzwfxy/zrs")
    public R<Integer> yzwfxyzrs() {
        return R.ok(warnService.wfxyzrs());
    }

    /**
     * 严重违反协议 - 本月新增人员数量
     */
    @GetMapping("/yzwfxy/byxzrs")
    public R<Integer> yzwfxybyxzrs() {
        return R.ok(warnService.wfxyxzrsByMonth(DateUtils.getDate()));
    }

    /**
     * 严重违反协议 - 统计 - 本月新增人员数量
     */
    @GetMapping("/yzwfxy/byxzrs/statistics")
    public R<List<DayStatisticsVo>> yzwfxybyxzrsStatistics() {
        return R.ok(warnService.yzwfxybyxzrsStatisticsByMonth(DateUtils.getDate()));
    }

    /**
     * 严重违反协议 - 本月新增人员详情列表
     */
    @GetMapping("/yzwfxy/byxzrs/detail")
    public R<List<RyDetailVo>> yzwfxybyxzrsDetail() {
        return R.ok(warnService.yzwfxyxzrsDetailByMonth(DateUtils.getDate()));
    }

    /**
     * 严重违反协议 - 导出 - 本月新增人员详情列表
     */
    @PostMapping("/yzwfxy/byxzrs/export")
    public void yzwfxybyxzrsExport(HttpServletResponse response) {
        List<RyDetailVo> list = warnService.yzwfxyxzrsDetailByMonth(DateUtils.getDate());
        ExcelUtil.exportExcel(list, "本月新增人数", RyDetailVo.class, response);
    }


    /*
     *  ------------------------------------ 超期为报道人数 ------------------------------------
     */

    /**
     * 超期未报道人数
     */
    @GetMapping("/sjsk/cqwbdrs/nums")
    public R<Integer> cqwbdrsNums() {
        return R.ok(warnService.cqwbdrsNumsByMonth(DateUtils.getDate()));
    }

    /**
     * 超期未报道人数 - 统计（日）
     */
    @GetMapping("/sjsk/cqwbdrs/statistics")
    public R<List<DayStatisticsVo>> cqwbdrsStatistics() {
        return R.ok(warnService.cqwbdrsStatisticsByMonth(DateUtils.getDate()));
    }

    /**
     * 超期未报道人员 - 详情列表
     */
    @GetMapping("/sjsk/cqwbdrs/detail")
    public R<List<RyDetailVo>> cqwbdrsDetail() {
        return R.ok(warnService.cqwbdrsDetailByDay(DateUtils.getDate()));
    }

    /**
     * 超期未报道人员 - 列表导出
     */
    @PostMapping("/sjsk/cqwbdrs/export")
    public void cqwbdrsExport(HttpServletResponse response) {
        List<RyDetailVo> list = warnService.cqwbdrsDetailByDay(DateUtils.getDate());
        ExcelUtil.exportExcel(list, "超期未报到人数", RyDetailVo.class, response);
    }

    /*
     * ------------------------------------ 强戒出所预警 ------------------------------------
     */

    /**
     * 强戒出所预警 - 统计（日）
     */
    @GetMapping("/qj/csry/statistics")
    public R<List<DayStatisticsVo>> qjcsryStatistics() {
        return R.ok(warnService.qjcsryStatisticsByMonth(DateUtils.getDate()));
    }

    /**
     * 强戒出所预警 - 人员列表
     */
    @GetMapping("/qj/csry/detail")
    public R<List<RyDetailVo>> qjcsryDetail() {
        return R.ok(warnService.qjcsryDetailByDay(DateUtils.getDate()));
    }

    /**
     * 强戒出所预警 - 列表导出
     */
    @PostMapping("/qj/csry/export")
    public void qjcsryExport(HttpServletResponse response) {
        List<RyDetailVo> list = warnService.qjcsryDetailByDay(DateUtils.getDate());
        ExcelUtil.exportExcel(list, "强戒出所预警人员", RyDetailVo.class, response);
    }

    /**
     * ------------------------------------ 吊销驾照预警 ------------------------------------
     */
    /**
     * 吊销驾照人数统计
     */
    @GetMapping("/sjsk/cjybqk/jszsfdx/statistics")
    public R<List<JszsfdxStatisticsVo>> jszsfdxStatistics() {
        return R.ok(warnService.jszsfdxStatistics());
    }

    /**
     * 未吊销驾照人员 - 详情列表
     */
    @GetMapping("/sjsk/cjybqk/jszsfdx/wdxry/detail")
    public R<List<RyDetailVo>> jszsfdxWdxryDetail() {
        return R.ok(warnService.jszsfdxWdxryDetail());
    }

    /**
     * 未吊销驾照人员 - 列表导出
     */
    @PostMapping("/sjsk/cjybqk/jszsfdx/wdxry/export")
    public void jszsfdxWdxryExport(HttpServletResponse response) {
        List<RyDetailVo> list = warnService.jszsfdxWdxryDetail();
        ExcelUtil.exportExcel(list, "未吊销驾驶证人员", RyDetailVo.class, response);
    }

    /**
     * ------------------------------------ 签到预警 ------------------------------------
     */
    /**
     * 签到预警人数统计
     */
    @GetMapping("/sjsk/qdyj/statistics")
    public R<List<QdyjStatisticsVo>> qdyjStatistics() {
        return R.ok(warnService.qdyjStatistics());
    }

    /**
     * 签到预警人员 - 详情列表
     */
    @GetMapping("/sjsk/qdyj/detail")
    public R<List<RyDetailVo>> qdyjDetail() {
        return R.ok(warnService.qdyjDetail());
    }

    /**
     * 签到预警 - 列表导出
     */
    @PostMapping("/sjsk/qdyj/export")
    public void qdyjExport(HttpServletResponse response) {
        List<RyDetailVo> list = warnService.qdyjDetail();
        ExcelUtil.exportExcel(list, "未吊销驾驶证人员", RyDetailVo.class, response);
    }

    /*
     * ------------------------------------ 尿检预警 ------------------------------------
     */

    /**
     * 尿检预警 - 提前15天预警未尿检人数
     */
    @GetMapping("/sjsk/njyj/num")
    public R<Integer> njyjNum() {
        return R.ok(warnService.njyjNum());
    }

    /**
     * 尿检预警 - 提前15天预警未尿检人员信息列表
     */
    @GetMapping("/sjsk/njyj/detail")
    public R<List<RyDetailVo>> njyjDetail(@RequestParam String type) {
        return R.ok(warnService.njyjDetail(type));
    }

    /**
     * 尿检预警 - 列表导出
     */
    @PostMapping("/sjsk/njyj/export")
    public void njyjExport(HttpServletResponse response, @RequestParam String type) {
        List<RyDetailVo> list = warnService.njyjDetail(type);
        ExcelUtil.exportExcel(list, "尿检预警人员", RyDetailVo.class, response);
    }

    /*
     * ------------------------------------ 家访预警 ------------------------------------
     */

    /**
     * 家访预警人数统计
     */
    @GetMapping("/sjsk/jfyj/statistics")
    public R<List<JfyjStatisticsVo>> jfyjStatistics() {
        return R.ok(warnService.jfyjStatistics());
    }

    /**
     * 家访预警人员 - 详情列表
     */
    @GetMapping("/sjsk/jfyj/detail")
    public R<List<RyDetailVo>> jfyjDetail() {
        return R.ok(warnService.jfyjDetail());
    }

    /**
     * 家访预警 - 列表导出
     */
    @PostMapping("/sjsk/jfyj/export")
    public void jfyjExport(HttpServletResponse response) {
        List<RyDetailVo> list = warnService.jfyjDetail();
        ExcelUtil.exportExcel(list, "未吊销驾驶证人员", RyDetailVo.class, response);
    }

    /*
     * ------------------------------------ 毛发检测预警 ------------------------------------
     */

    /**
     * 毛发检测预警人数统计
     */
    @GetMapping("/chdj/mftj/num")
    public R<Integer> mftjNum() {
        return R.ok(warnService.mftjNum());
    }

    /**
     * 毛发检测预警人员 - 详情列表
     */
    @GetMapping("/chdj/mftj/detail")
    public R<List<RyDetailVo>> mftjDetail() {
        return R.ok(warnService.mftjDetail());
    }

    /**
     * 毛发检测预警 - 列表导出
     */
    @PostMapping("/chdj/mftj/export")
    public void mftjExport(HttpServletResponse response) {
        List<RyDetailVo> list = warnService.mftjDetail();
        ExcelUtil.exportExcel(list, "未吊销驾驶证人员", RyDetailVo.class, response);
    }

    /*
     * ------------------------------------ 帮扶预警 ------------------------------------
     */

    /**
     * 帮扶预警 - 人数统计
     */
    @GetMapping("/sjsk/bfyj/statistics")
    public R<BfyjStatisticsVo> bfyjStatistics() {
        return R.ok(warnService.bfyjStatistics());
    }

    /**
     * 帮扶预警 - 详情列表
     */
    @GetMapping("/sjsk/bfyj/detail")
    public R<List<RyDetailVo>> bfyjDetail() {
        return R.ok(warnService.bfyjDetail());
    }

    /**
     * 帮扶预警 - 列表导出
     */
    @PostMapping("/sjsk/bfyj/export")
    public void bfyjExport(HttpServletResponse response) {
        List<RyDetailVo> list = warnService.mftjDetail();
        ExcelUtil.exportExcel(list, "帮扶人员", RyDetailVo.class, response);
    }

    /*
     * ------------------------------------ 房屋踏查预警 ------------------------------------
     */

    /**
     * 房屋踏查预警 - 超期数量统计
     */
    @GetMapping("/fwtcyj/num")
    public R<Integer> fwtcyjNum() {
        return R.ok(warnService.fwtcyjNum());
    }

    /**
     * 房屋踏查预警 - 详情列表
     */
    @GetMapping("/fwtcyj/detail")
    public R<List<FwTcDetailVo>> fwtcyjDetail(@RequestParam String type,
                                              @RequestParam String mode) {
        return R.ok(warnService.fwtcyjDetail(type, mode));
    }

    /**
     * 房屋踏查预警 - 列表导出
     */
    @PostMapping("/fwtcyj/export")
    public void fwtcyjExport(HttpServletResponse response,
                             @RequestParam String type,
                             @RequestParam String mode) {
        List<FwTcDetailVo> list = warnService.fwtcyjDetail(type, mode);
        ExcelUtil.exportExcel(list, "房屋踏查", FwTcDetailVo.class, response);
    }
}
